{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "def heatmap(data, row_labels, col_labels, ax=None,\n",
    "            cbar_kw={}, cbarlabel=\"\", **kwargs):\n",
    "    if not ax:\n",
    "        ax = plt.gca()\n",
    "\n",
    "    im = ax.imshow(data, **kwargs)\n",
    "    cbar = ax.figure.colorbar(im, ax=ax, **cbar_kw)\n",
    "    cbar.ax.set_ylabel(cbarlabel, rotation=-90, va=\"bottom\")\n",
    "    ax.set_xticks(np.arange(data.shape[1]))\n",
    "    ax.set_yticks(np.arange(data.shape[0]))\n",
    "    ax.set_xticklabels(col_labels)\n",
    "    ax.set_yticklabels(row_labels)\n",
    "    ax.tick_params(top=True, bottom=False, labeltop=True, labelbottom=False)\n",
    "    plt.setp(ax.get_xticklabels(), rotation=-30, ha=\"right\", rotation_mode=\"anchor\")\n",
    "    for edge, spine in ax.spines.items():\n",
    "        spine.set_visible(False)\n",
    "    ax.set_xticks(np.arange(data.shape[1]+1)-.5, minor=True)\n",
    "    ax.set_yticks(np.arange(data.shape[0]+1)-.5, minor=True)\n",
    "    ax.grid(which=\"minor\", color=\"w\", linestyle='-', linewidth=3)\n",
    "    ax.tick_params(which=\"minor\", bottom=False, left=False)\n",
    "    return im, cbar"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = np.array([\n",
    "    [30, 20, 10,],\n",
    "    [10, 40, 15],\n",
    "    [12, 10, 20]\n",
    "])\n",
    "\n",
    "im, cbar = heatmap(data, ['Class-1', 'Class-2', 'Class-3'], ['A', 'B', 'C'], cmap='YlGn', cbarlabel='Number of Students')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def annotate_heatmap(im, data=None, valfmt=\"{x:.2f}\",\n",
    "                     textcolors=[\"black\", \"white\"],\n",
    "                     threshold=None, **textkw):\n",
    "    import matplotlib\n",
    "    if not isinstance(data, (list, np.ndarray)):\n",
    "        data = im.get_array()\n",
    "    if threshold is not None:\n",
    "        threshold = im.norm(threshold)\n",
    "    else:\n",
    "        threshold = im.norm(data.max())/2.\n",
    "    kw = dict(horizontalalignment=\"center\",\n",
    "              verticalalignment=\"center\")\n",
    "    kw.update(textkw)\n",
    "    if isinstance(valfmt, str):\n",
    "        valfmt = matplotlib.ticker.StrMethodFormatter(valfmt)\n",
    "    texts = []\n",
    "    for i in range(data.shape[0]):\n",
    "        for j in range(data.shape[1]):\n",
    "            kw.update(color=textcolors[im.norm(data[i, j]) > threshold])\n",
    "            text = im.axes.text(j, i, valfmt(data[i, j], None), **kw)\n",
    "            texts.append(text)\n",
    "\n",
    "    return texts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\rutujay\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:19: DeprecationWarning: In future, it will be an error for 'np.bool_' scalars to be interpreted as an index\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "im, cbar = heatmap(data, ['Class-1', 'Class-2', 'Class-3'], ['A', 'B', 'C'], cmap='YlGn', cbarlabel='Number of Students')\n",
    "\n",
    "texts = annotate_heatmap(im, valfmt=\"{x}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
